iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 7
1
自我挑戰組

自學CodeIgniter跌跌撞撞30天系列 第 7

[ Day 7 ] CodeIgniter第二個手作:新聞列表 (3):新增內容。

  • 分享至 

  • xImage
  •  

本篇有部分內容承接上篇[ Day 6 ] CodeIgniter第二個手作:新聞列表 (2):從資料庫取出資料。,有疑問可以回頭看一下唷!

想像力就是你的超能力

先來回想一下當時建立資料的欄位有哪些?id、title、slug、text
因為id是自動長出來的,所以id不需要填。slug在user guide的做法是以標題自動產生,且中間用"dash"串起來,所以~基於想像力的呈現,畫面上會有兩個欄位——「標題」及「內文」。
(正常來說,網站的規劃不應該是這樣的唷!這是照著user guide走的,求功能學會,不求網站規劃學習唷!)

拿著你的畫筆畫,把畫面做出來。

把畫面想像出來後,在view底下的news中建立create.php,把預想的畫面以代碼呈現:

<h2>建立新聞項目</h2>
<?php echo validation_errors(); ?>
<?php echo form_open('news/create') ?>

	<label for="title">標題</label> 
	<input type="input" name="title" /><br />

	<label for="text">內文</label>
	<textarea name="text"></textarea><br />
	
	<input type="submit" name="submit" value="建立新聞項目" /> 
</form>

有了建立表單後,還需要建立一個顯示輸入完成的頁面success.php,想要多花俏就多花俏,文章考量視覺因素,從簡處理:

OK!

控制器是Model和View之間的橋樑,不可或缺。

打開名為news控制器(衍用上篇),加上create()建立新聞的部分,代碼如下:

public function create()
{
	$this->load->helper('form');
	$this->load->library('form_validation');
	
	$data['title'] = 'Create a news item';
	
	$this->form_validation->set_rules('title', '標題', 'required');
	$this->form_validation->set_rules('text', '內文', 'required');
	
	if ($this->form_validation->run() === FALSE)
	{
		$this->load->view('temp/header', $data);	
		$this->load->view('news/create');
		$this->load->view('temp/footer');
		
	}
	else
	{
		$this->news_model->set_news();
		$this->load->view('news/success');
	}
}

有沒有看到很眼熟的東西?沒錯是helper輔助函數!
名為form的輔助函數,可以幫你產生表單元素,表單的元素有很多種(input、textarea⋯⋯等等等),基本都不難,此處也不超出html的理解範圍,所以這部分就不深入再說明了,詳細請看傳送門Form 輔助函數

表單驗證的部分容我在這裡簡述一下,陣列的三個欄位分別是field、label、rules並不難理解,因為講起來內容龐大,後續有機會研究後再出一篇筆記給大家!

再來~判斷很簡單,當表單驗證失敗時,維持原本畫面,成功時,跳到剛才突然想要花俏的成功頁。

資料不動,會腦洞,資料也要動恣動

這樣子我們就做完了嗎?沒有感覺哪裡怪怪的嗎!?萬事俱備只欠東風,少了建立檔案的「動作」,承上篇的model檔案,把代碼加入:

public function set_news()
{
	$this->load->helper('url');
	
	$slug = url_title($this->input->post('title'), 'dash', TRUE);
	
	$data = array(
		'title' => $this->input->post('title'),
		'slug' => $slug,
		'text' => $this->input->post('text')
	);
	
	return $this->db->insert('news', $data);
}

簡單介紹一下,$slug的部分是將標題以"-"串起來,再把全部資料放入陣列後~丟進資料庫新增。

結尾很多話要說

關於範例

官方提供的這個範例,因為資料庫編碼的關係,並沒有辦法輸入中文~有這方面困擾的同學,在建立資料庫時,略微修改一下就可以了!

自己的竊竊私語

先自我感動鐵人滿週(拍手),來推薦和本篇完全毫無相關的系列資安文給大家,這算工商時間嗎?拍謝,我沒收費唷!因為最近參加資安的Conf,深刻體會:資安的教育不、能、等!
所以請容我私心推薦我愛的這系列:資安x系統x絕對領域
若能成功的撐完第二週,會再推薦好東西給大家der <3 互惠學習!


上一篇
[ Day 6 ] CodeIgniter第二個手作:新聞列表 (2):從資料庫取出資料。
下一篇
[ Day 8 ] CodeIgniter第二個手作:番外篇(1):Active Record——查詢資料 (Selecting)
系列文
自學CodeIgniter跌跌撞撞30天12
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
code165
iT邦新手 5 級 ‧ 2017-12-08 15:48:17

大大您好,想請教說~
我目前的程式碼都正常,也可以load出資料庫的內容,
但是卻無法insert create裡的表單資料到資料庫裡面,
請問是什麼原因呢>_<?

我的ci檔案在這裏
https://mega.nz/#!VlkEmACS!Gi9Nn588Vfp2sojYmeiB33xGKBcr27LOY278JpuOjMQ

code165 iT邦新手 5 級 ‧ 2017-12-08 20:57:08 檢舉

好了好了,是我的設定有問題,感恩。

我要留言

立即登入留言